package com.tjec.project.projectWorkbench.service;

import com.tjec.framework.web.domain.AjaxResult;
import com.tjec.project.projectWorkbench.domain.BmsProject;
import com.tjec.project.projectWorkbench.domain.BmsProjectSimple;
import com.tjec.project.workflow.domain.BmsWorkflow;

import java.util.List;
import java.util.Map;

/**
 * 项目Service接口
 *
 * @author cjj
 * @date 2020-04-07
 */
public interface IBmsProjectService {
    /**
     * 查询项目
     *
     * @param guid 项目guid
     * @return 项目
     */
    public BmsProject selectBmsProjectByGuid(String guid);

    /**
     * 查询项目列表
     *
     * @param bmsProject 项目
     * @return 项目集合
     */
    public List<BmsProject> selectBmsProjectList(BmsProject bmsProject);

    /**
     * 新增项目
     *
     * @param bmsProject 项目
     * @return 结果
     */
    public int insertBmsProject(BmsProject bmsProject);

    /**
     * 修改项目
     *
     * @param bmsProject 项目
     * @return 结果
     */
    public int updateBmsProject(BmsProject bmsProject);

    /**
     * 批量删除项目
     *
     * @param guids 需要删除的项目guid
     * @return 结果
     */
    public int deleteBmsProjectByGuids(String[] guids);

    /**
     * 删除项目信息
     *
     * @param guid 项目guid
     * @return 结果
     */
    public int deleteBmsProjectByGuid(String guid);

    /**
     * 通过项目负责人查询项目
     *
     * @param projectLeader 项目负责人
     * @return 项目
     */
//    public List<BmsProject> selectBmsProjectByProjectLeader(String projectLeader);

    /**
     * 查询项目工作台-项目一览列表
     *
     * @param bmsProject 项目
     * @return 项目
     */
    List<BmsProjectSimple> selectBmsProjectGlanceList(BmsProjectSimple bmsProject);

    /**
     * 项目冻结/解冻（编辑）
     *
     * @param guid 项目guid
     * @return 项目
     */
    BmsProject selectBmsProjectById(String guid);

    /**
     * 更新项目表根据第三方数据
     *
     * @param userGuid       登录用户guid
     * @param allUpdates 数据全部更新
     * @return
     */
    AjaxResult updateBmsProjectByThirdParty(String userGuid, Boolean allUpdates,Boolean type);

    /**
     * 更新某个项目根据第三方数据
     *
     * @param projectGlobalId       项目全局id
     * @param timeStamp       时间戳
     * @return
     */
    AjaxResult updateBmsProjectByThirdParty(BmsProject bmsProject);

    /**
     * 更新项目表根据第三方数据
     * @param  date 时间
     * @param   lender globalId,projectLeaderNo项目代码块，date时间
     * @return
     */
    List<BmsProject> synchronous(String lender,String projectLeaderNo, long date);

    /**
     * 我的项目(总项目数、进行中项目数、筹备中项目数)
     * @return
     */
    Map<String, Object> countMyProject(String userGuid);
    /*
      获取最大时间戳
     */
    long selectMaxTime();

    /**
     * 修改项目负责人代码通过项目负责人Guid
     *
     * @param projectLeader 项目负责人Guid
     * @param projectLeaderNo 项目负责人代码
     * @return 结果
     */
    public int updateBmsProjectLeaderNoByProjectLeader(String projectLeader, String projectLeaderNo);

    /**
     * 修改项目项目经理
     * @param projectId 项目Id
     * @param projectManager 项目经理用户id
     * @return
     */
    public int updateBmsProjectManager(String projectId, String projectManager);

    /**
     * 同步获取并处理项目负责人的项目合同数据
     * @param userGuid
     */
    void updateBmsProjectContractByThirdParty(String userGuid);

    /**
     * 调用BPM接口，取消未完成流程
     * @param bmsWorkflow
     */
    void cancelInstance(BmsWorkflow bmsWorkflow);

    /**
     * 检查本项目状态
     * @param projectId 项目id
     */
    boolean checkProjectStatus(String projectId);

    /**
     * 查询此人是否是当前项目成员或项目负责人
     * @param projectId 项目ID
     * @param userId 用户ID
     * @return
     */
    public int checkUserIsMember(String projectId,String userId,String jobNo);

    public int checkUserIsMemberList(String userId,String jobNo);
}
